package com.xjh.basestudy.designmode.behaviorMode.behaviorMode7_Mediator.p1_origin;

/**
 * @Author XuJianHua
 * @Date 2022/10/4 21:13
 * @Description
 * 人类在第3行以名字作为代号来区分不同的人（对象），接着在第4行持有另外一方沟通人的引用，并于第14行的连接方法connect()中将对方注入以建立连接，
 * 如此才能与对方进行沟通。当然，作为人类一定可以讲话与聆听，于是我们在第18行的发言方法talk()中调用了对方的聆听方法，并将消息传递给对方。在第22行的聆听方法listen()中收到对方的消息时则进行输出。
 *
 * ，张三和李四两人聊得不亦乐乎，第14行的输出结果显示双方沟通顺利达成，信息可由一方发出再传递给另一方，反之亦然，看起来这种沟通毫无障碍。这种设计虽然简单、直接，但请注意第7行与第8行代码，
 * 双方在沟通前必须先建立连接，互相持有对方对象的引用，这样才能知道对方的存在。但如此便造成你中有我、我中有你，谁也离不开谁的状况，双方对象的耦合性太强。
 * 虽然在两人沟通的情况下，强耦合也不会造成太大问题，但是倘若我们要进行一场多方讨论的会议，那么在这种沟通模式下，每个参会人就不止是持有沟通对方这么简单了，而是必须持有其他所有人对象的引用列表（如使用ArrayList）
 *
 * 对象间这种千丝万缕的耦合关系会带来很大的麻烦，当我们要加入或减少一个参会人时，都要将其同步更新给所有人，
 * 每个人发送消息时都要先查找一遍消息接收方，从而产生很多重复工作。我们陷入了一种多对多的对象关联陷阱，这让复杂的对象关系难以维护，所以必须重新考虑更合理的设计模式。
 *
 * 我的理解:创建张三用户对象，注入李四用户对象，张三讲话，调用李四对象的listen方法，输出张三讲话内容
 */
public class Client {

    public static void main(String args[]) {
        People p3 = new People("张三");
        People p4 = new People("李四");

        p3.connect(p4);
        p4.connect(p3);

        p3.talk("你好。");
        p4.talk("早上好，三哥。");
    }
/****************************
 输出结果：
 张三 对 李四 说：你好。
 李四 对 张三 说：早上好，三哥。
 *****************************/
}